using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools._TriangulatedSurface
{
    /// <summary>
    /// <para>Surface Contour</para>
    /// <para>Creates contour lines derived from a terrain, TIN, or LAS dataset surface.</para>
    /// <para>创建派生自 terrain、TIN 或 LAS 数据集表面的等值线。</para>
    /// </summary>    
    [DisplayName("Surface Contour")]
    public class SurfaceContour : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public SurfaceContour()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_surface">
        /// <para>Input Surface</para>
        /// <para>The TIN, terrain, or LAS dataset surface to process.</para>
        /// <para>要处理的 TIN、terrain 或 LAS 数据集表面。</para>
        /// </param>
        /// <param name="_out_feature_class">
        /// <para>Output Feature Class</para>
        /// <para>The feature class that will be produced.</para>
        /// <para>将生成的要素类。</para>
        /// </param>
        /// <param name="_interval">
        /// <para>Contour Interval</para>
        /// <para>The interval between the contours.</para>
        /// <para>等值线之间的间隔。</para>
        /// </param>
        public SurfaceContour(object _in_surface, object _out_feature_class, double? _interval)
        {
            this._in_surface = _in_surface;
            this._out_feature_class = _out_feature_class;
            this._interval = _interval;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "Surface Contour";

        public override string CallName => "3d.SurfaceContour";

        public override List<string> AcceptEnvironments => ["XYDomain", "XYResolution", "XYTolerance", "autoCommit", "configKeyword", "extent", "geographicTransformations", "outputCoordinateSystem", "terrainMemoryUsage", "workspace"];

        public override object[] ParameterInfo => [_in_surface, _out_feature_class, _interval, _base_contour, _contour_field, _contour_field_precision, _index_interval, _index_interval_field, _z_factor, _pyramid_level_resolution];

        /// <summary>
        /// <para>Input Surface</para>
        /// <para>The TIN, terrain, or LAS dataset surface to process.</para>
        /// <para>要处理的 TIN、terrain 或 LAS 数据集表面。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Surface")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_surface { get; set; }


        /// <summary>
        /// <para>Output Feature Class</para>
        /// <para>The feature class that will be produced.</para>
        /// <para>将生成的要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_feature_class { get; set; }


        /// <summary>
        /// <para>Contour Interval</para>
        /// <para>The interval between the contours.</para>
        /// <para>等值线之间的间隔。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Contour Interval")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public double? _interval { get; set; }


        /// <summary>
        /// <para>Base Contour</para>
        /// <para>Defines the starting Z value from which the contour interval is either added or subtracted to delineate contours. The default value is 0.0.</para>
        /// <para>定义起始 Z 值，从中添加或减去等值线间隔以描绘等值线。默认值为 0.0。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Base Contour")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _base_contour { get; set; } = 0;


        /// <summary>
        /// <para>Contour Field</para>
        /// <para>The field that stores the contour value associated with each line in the output feature class.</para>
        /// <para>用于存储与输出要素类中每条线关联的等值线值的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Contour Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _contour_field { get; set; } = null;


        /// <summary>
        /// <para>Contour Field Precision</para>
        /// <para>The precision of the contour field. Zero specifies an integer, and the numbers 1–9 indicate how many decimal places the field will contain. By default, the field will be an integer (0).</para>
        /// <para>等值线场的精度。零指定一个整数，数字 1-9 表示字段将包含多少位小数。默认情况下，该字段将为整数 （0）。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Contour Field Precision")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _contour_field_precision { get; set; } = 0;


        /// <summary>
        /// <para>Index Interval</para>
        /// <para>Index contours are commonly used as a cartographic aid for assisting in the visualization of contour lines. The index interval is typically five times larger than the contour interval. Use of this parameter adds an integer field defined by the Index Interval Field to the attribute table of the output feature class, where a value of 1 denotes the index contours.</para>
        /// <para>索引等值线通常用作制图辅助工具，用于辅助等值线的可视化。指数间隔通常比等值线间隔大五倍。使用此参数会将索引间隔字段定义的整数字段添加到输出要素类的属性表中，其中值 1 表示索引等值线。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Index Interval")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _index_interval { get; set; } = null;


        /// <summary>
        /// <para>Index Interval Field</para>
        /// <para>The name of the field used to identify index contours. This will only be used if the Index Interval is defined. By default, the field name is Index.</para>
        /// <para>用于标识索引轮廓的字段的名称。仅当定义了索引间隔时，才会使用此值。默认情况下，字段名称为 Index。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Index Interval Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _index_interval_field { get; set; } = null;


        /// <summary>
        /// <para>Z Factor</para>
        /// <para>The factor by which z-values will be multiplied. This is typically used to convert z linear units to match x,y linear units. The default is 1, which leaves elevation values unchanged. This parameter is not available if the spatial reference of the input surface has a z datum with a specified linear unit.</para>
        /// <para>z 值将乘以的因子。这通常用于转换 z 线性单位以匹配 x，y 线性单位。默认值为 1，使高程值保持不变。如果输入曲面的空间参考具有具有指定线性单位的 z 基准面，则此参数不可用。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Z Factor")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _z_factor { get; set; } = 1;


        /// <summary>
        /// <para>Pyramid Level Resolution</para>
        /// <para>The z-tolerance or window-size resolution of the terrain pyramid level that will be used. The default is 0, or full resolution.</para>
        /// <para>将使用的地形金字塔级别的 z 容差或窗口大小分辨率。默认值为 0，即全分辨率。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Pyramid Level Resolution")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _pyramid_level_resolution { get; set; } = 0;


        public SurfaceContour SetEnv(object XYDomain = null, object XYResolution = null, object XYTolerance = null, int? autoCommit = null, object configKeyword = null, object extent = null, object geographicTransformations = null, object outputCoordinateSystem = null, object terrainMemoryUsage = null, object workspace = null)
        {
            base.SetEnv(XYDomain: XYDomain, XYResolution: XYResolution, XYTolerance: XYTolerance, autoCommit: autoCommit, configKeyword: configKeyword, extent: extent, geographicTransformations: geographicTransformations, outputCoordinateSystem: outputCoordinateSystem, terrainMemoryUsage: terrainMemoryUsage, workspace: workspace);
            return this;
        }

    }

}